java  스 레 드 상세 및 스 레 드 와 프로 세 스 의 차이

java  스 레 드 상세 및 스 레 드 와 프로 세 스 의 차이
1.프로 세 스 와 스 레 드
   모든 프로 세 스 는 하나의 메모리 공간 을 독점 합 니 다.하나의 프로그램 은 여러 프로 세 스 를 동시에 시작 할 수 있 습 니 다.예 를 들 어 IE 브 라 우 저 는 Ie 브 라 우 저 를 열 면 프로 세 스 를 시작 하 는 것 과 같다.
   스 레 드 는 프로 세 스 의 실행 프로 세 스 를 말 합 니 다.하나의 프로 세 스 는 여러 스 레 드 를 포함 할 수 있 습 니 다.
   모든 프로 세 스 는 운영 체제 가 독립 된 메모리 공간 을 할당 해 야 하 며,같은 프로 세 스 의 여러 스 레 드 가 이 공간 을 공유 해 야 합 니 다.즉,메모리 등 자원 을 공유 하 는 것 입 니 다.
   자바.exe 를 호출 할 때마다 운영 체 제 는 자바 가상 컴퓨터 프로 세 스 를 시작 합 니 다.자바 가상 컴퓨터 프로 세 스 를 시작 할 때 자바 가상 컴퓨터 는 메 인 스 레 드 를 만 듭 니 다.이 스 레 드 는 프로그램 입구 main 방법 부터 실 행 됩 니 다.
  자바 가상 머 신 은 스 레 드 를 시작 할 때마다 이 스 레 드 에 스 레 드 방법 스 택 을 할당 하여 관련 정 보 를 저장 합 니 다(예 를 들 어 부분 변수 등).스 레 드 는 이 스 택 에서 실 행 됩 니 다.그래서 자바 대상 의 부분 변 수 는 모두 스 레 드 가 안전 하지만 인 스 턴 스 변수 와 클래스 변 수 는 스 택 에 저장 되 어 있 지 않 기 때문에 스 레 드 가 안전 하지 않 습 니 다.
  프로 세 스 는 세 가지 상태 가 있 습 니 다.준비,실행,차단.
 
2.스 레 드 생 성 방식
   Runnable 방식:(이 방식 은 유연 하고 추천 합 니 다)

public class Thread02 implements Runnable {
 
  public static void main(String[] args) {
    Runnable r = new <strong>Thread02</strong>();
    Thread t1 = new Thread(<strong>r</strong>, "t1");
    /** 
     *   Thread  
     *   public Thread(Runnable target, String name) {
          init(null, target, name, 0);
             }
     */
    Thread t2 = new Thread(r, "t2");
    t1.start(); //     t1,      ,  cpu
    t2.start(); //     t2,      ,  cpu
    t1.run(); //    main    t1 run  
  }
 
  public void run() {
    System.out.println("thread's name is "
        + Thread.currentThread().getName());
  }
 
}
실행 결 과 는 다음 과 같 습 니 다:

thread's name is t1
thread's name is main
thread's name is t2
Thead 방식

public class Thread03 extends Thread {
 
  public static void main(String[] args) {
    Thread03 t1 = new <strong>Thread03</strong>();   //          Thread t1=new Thread()   :Thread03         
    t1.start();
  }
 
  public void run() {
    System.out.println("thread's name is "
        + Thread.currentThread().getName());
  }
}
실행 결과:thread's name is Thread-0
메모:프로그램 이 실 행 될 때마다 사용자 정의 스 레 드 외 에 main 스 레 드 가 있 습 니 다.
 종합:

public class Thread01 {
  public static void main(String[] args) {

    Thread thread=new Thread();
    thread.start();//        run()
    /** Thread  run
     * public void run() {
      if (target != null) {
        target.run();
      }
      }
                  run  ,         run() ,                
     */
    
    //       1 thread    (  )
    Thread thread1=new Thread(){
      public void run() {
        while(true){
          try {
            Thread.sleep(500);//  500  
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
          //Thread.currentThread()      
          System.out.println("  1     "+Thread.currentThread().getName());
        }
      }
    };
//    thread1.start(); //          
    
    
    //       2 runnable  (  )      
    Thread thread2=new Thread(new Runnable(){

      public void run() {

        while(true){
          try {
            Thread.sleep(300);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
          System.out.println("thread2'name is "+Thread.currentThread().getName());
          
        }
      }});
//    thread2.start();
    
    //    thread
    new Thread(new Runnable(){
      public void run() {
        System.out.println("runnable "+Thread.currentThread().getName());
      }}){
      public void run() { //    run        run  ,       runnable
        System.out.println("thread "+Thread.currentThread().getName());
      }
    }.start();
  }
  /***
   *    cpu                                    
   */
}

읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기